/*
 * 
 */
package es.drOsu.game;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.google.ads.AdRequest;
import com.google.ads.AdView;

import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import es.drOsu.common.Constants;
import es.drOsu.common.SongsSQLiteHelper;
import es.drOsu.common.Tools;

// TODO: Auto-generated Javadoc
/**
 * The Class Songs clase que busca en toda SD del dispositivo archivos MP3 para su posterior visualizacion y seleccion por el jugador para jugar dicha cancion.
 */
public class Songs extends ListActivity{
	
	/** The Constant TAG variable para la depuracion y LogCat. */
	private static final String TAG = "Songs";
	
	/** The elementos lista con los nombres de los artistas y sus correspondientes canciones. */
	List<String> elementos = null; 
	
	/** The path files lista con todos las rutas de acceso a las canciones. */
	List<String> pathFiles = null;
	
	/** The game mode modo de juego elegido por el jugador. */
	private int gameMode = -1;
	
	/** The user nombre del jugador. */
	private String user = null;

	/** The game difficulty dificultad de juego elegida por el jugador. */
	private int gameDifficulty;
	
	/* (non-Javadoc)
	 * @see android.app.Activity#onCreate(android.os.Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//para quitar el titulo
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //para ponerlo a pantalla completa
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //cargar la view
		setContentView(R.layout.songs);

		Bundle bundle = this.getIntent().getExtras();
		gameMode = bundle.getInt(Constants.keyGameMode);
		user = bundle.getString(Constants.keyUser);
		gameDifficulty = bundle.getInt(Constants.keyGameDifficulty);
		//File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
		
		File[] files = new File("/mnt/sdcard").listFiles();
		elementos = new ArrayList<String>();
		pathFiles = new ArrayList<String>();
		try{
			fillWithSongs(files, (ArrayList<String>) elementos,(ArrayList<String>) pathFiles);
		}catch (NullPointerException e) {
			Log.d("game", "error null: " + elementos, e);
		}
			
			ArrayAdapter<String> listaArchivos= new ArrayAdapter<String>(this, R.layout.row, elementos);
			if(elementos.size()==0){
				Toast.makeText(getBaseContext(), 
						getResources().getString(R.string.no_music_found), 
		                   Toast.LENGTH_LONG).show();
			}else
				setListAdapter(listaArchivos);
			
			AdView adView = (AdView)this.findViewById(R.id.AdMob);
	        AdRequest request = new AdRequest();
	        //request.addTestDevice(AdRequest.TEST_EMULATOR);
	        //request.addTestDevice("527E3725F773AF4EB8D7BE441914A139");
	        request.setTesting(true);
	       
	        adView.loadAd(request);
	}
	
	/* (non-Javadoc)
	 * @see android.app.ListActivity#onListItemClick(android.widget.ListView, android.view.View, int, long)
	 */
	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		Log.d(TAG, "path: " + pathFiles.get(position));
		if(Tools.checkConnectivity(this)){
			try {
				Intent intent = new Intent(this, GameNewActivity.class);
				Bundle bundle = new Bundle();
				bundle.putString(Constants.keyPath, pathFiles.get(position));
				bundle.putString(Constants.keyUser, user);
				bundle.putInt(Constants.keyGameMode, gameMode);
				bundle.putInt(Constants.keyGameDifficulty, gameDifficulty);
				intent.putExtras(bundle);
				SongsSQLiteHelper.addSong(this, pathFiles.get(position), user, 0);
				SharedPreferences prefs = getSharedPreferences(user,Context.MODE_PRIVATE);
				if(prefs.contains(Constants.sharedPreferencesSongs)==false){
					SharedPreferences.Editor editor = prefs.edit();
					editor.putString(Constants.sharedPreferencesSongs, Constants.sharedPreferencesSongsCheck);
					editor.commit();
				}
				startActivity(intent);
				
			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else{
			Intent mainIntent = new Intent(this, DrosuMain.class);
			startActivity(mainIntent);
		}
	}
	
    /* (non-Javadoc)
     * @see android.app.Activity#onPause()
     */
    @Override
    protected void onPause(){
            super.onPause();
            Log.d(TAG, "onPause()");
            finish();
    }
    
    /* (non-Javadoc)
     * @see android.app.Activity#onRestart()
     */
    @Override
    protected void onRestart() {
            // TODO Auto-generated method stub
            super.onRestart();
            Log.d(TAG, "onRestart");
            finish();
    }

	/**
	 * Fill with songs metodo que busca recursivamente en la SD del dispositivo todas las canciones MP3 cuyas tags ID3 esten correctas(tengan su artista y titulo).
	 *
	 * @param files the files ruta en la que se encuentra montada la SD en el dispositivo
	 * @param elem the elem lista en la que se guardaran los nombre de los artistas y sus canciones
	 * @param pathFiles the path files lista en la que se guardaran la ruta de acceso a dichas canciones
	 */
	void fillWithSongs(File[] files, ArrayList<String> elem, ArrayList<String> pathFiles){
        for( File file : files){        
            if (file.isFile() && file.getName().endsWith(".mp3")){
                es.drOsu.common.Song song=new es.drOsu.common.Song(file.getPath());
                Log.d(TAG, "artista: "+song.artist+" title: "+song.title + " path: "+file.getPath());
                if(song.artist != null && song.title != null){
                        elem.add(song.title+" - "+song.artist);
                        pathFiles.add(file.getPath());
                }
            }else if (file.isDirectory() && (file.getName().toString().startsWith(".", 0) == false)){
                fillWithSongs(new File(file.getPath()).listFiles(),elem, pathFiles);                    
            }
        }
	}

}
